openvpn 配置
·
Table of Contents
安装和配置
apt install openvpn
# 覆盖默认配置, 探测192.168.2.1可达
sudo tee /etc/systemd/system/[email protected] <<EOF
[Unit]
Description=OpenVPN tunnel for %I after IP 192.168.2.1 to be reachable
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/client
ExecStartPre=/bin/bash -c 'until ping -c 1 -W 5 192.168.2.1; do sleep 1; done
ExecStart=/usr/sbin/openvpn --suppress-timestamps --nobind --config %i.conf
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SETPCAP CAP_SYS_CHROOT CAP_DAC_OVERRIDE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF | sudo tee /etc/openvpn/client/work.conf
client
dev tun
proto tcp
remote <ip> <port>
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo no
auth-user-pass
# openvpn3 客户端支持账户认证, openvpn2 好像支持环境变量热证
# <auth-user-pass>
# VPN_USERNAME_HERE
# VPN_PASSWORD_HERE
# </auth-user-pass>
remote-cert-tls server
data-ciphers AES-256-GCM:AES-256-CBC
data-ciphers-fallback AES-256-CBC
verb 3
<ca>
-----BEGIN CERTIFICATE-----
XXX base 64
-----END CERTIFICATE-----
</ca>
EOF
sudo systemctl start [email protected]
# 可以手动调节metric 防止影响局域网路由
sudo ip route change default via 10.8.0.1 dev tun0 metric 300
服务端配置
可以参考ldap账户认证
配置路由
ip route
# 192.168.5.0/24 dev eno1 proto kernel scope link src 192.168.5.23 metric 100
# 192.168.4.0/22 via 10.8.0.9 dev tun0
# 192.168.4.0/22 via 10.8.0.9 dev tun0 metric 10
ip route get 192.168.5.244
# 192.168.5.244 dev eno1 src 192.168.5.23 uid 1000
# cache
# 为什么经过dev tun0 的路由地址metric优先级(10)更高, 但是路由却走了直连的路由???
原因
- Metric 只在“相同目标前缀”的多条路由之间比较时才生效。
- 例如:两条都是 192.168.5.0/24,一个 metric 10,一个 metric 100 → 选 metric 10。
- 但你的 metric 10 路由是 192.168.4.0/22,和 192.168.5.0/24 不是相同前缀!
- 前缀长度优先于 metric
- 目标地址 192.168.5.244 属于 192.168.5.0/24 网段。
- Linux 路由查找时会做 最长前缀匹配(Longest Prefix Match),而:
- 192.168.5.0/24 是 /24 前缀
- 192.168.4.0/22 虽然也包含 192.168.5.244(因为 /22 覆盖 192.168.4.0 ~ 192.168.7.255),但它是 更短的前缀(/22 < /24)
- ✅ 所以系统 优先选择更具体的 /24 路由
如果你真的想让 192.168.5.244 走 tun0 怎么办?
这是个非常规需求(因为 192.168.5.244 和你本机在同一个局域网),但技术上可以做到:
添加更具体的 /32 路由(推荐)
sudo ip route add 192.168.5.244 via 10.8.0.9 dev tun0 metric 5
使用策略路由(高级)
通过 ip rule + 自定义路由表,对特定用户/进程/防火墙标记的流量使用不同路由。
sudo ip rule add to 192.168.5.244/24 lookup 100
sudo ip route add default via 10.8.0.9 dev tun0 table 100